package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * JDK5之后推出了一个特性：泛型
 * 泛型也称为参数化类型，允许我们在使用一个类时通过其定义的泛型来指定其谋属性，某方法的参数或返回值的类型，使得我们使用该类百年的更灵活
 * 泛型广泛应用于集合，用于指定集合的元素类型
 * 泛型实际上编译器认可的，原型为Object，泛型只是辅助编译器检查赋值操作时泛型类型的检查和获取泛型值使得自动造型
 */
public class CollectionDemo5 {
    public static void main(String[] args) {
        /*
        Collection接口定义：public interface Collection<E>...
        E:表示一个类型
        而Collection中的方法，如：
        boolean add（E e）参数的类型也使用的是collection上声明的泛型E
        使用集合时可以为Collection定义的泛型指定具体的类型
         */
        Collection<String> c = new ArrayList<>();//希望当前集合存放的元素为String类型
        c.add("one");
        //c.add(new Point(1,2));上传的不是String类型的或编译错误

        //迭代器也支持泛型,指定的泛型要与其遍历的集合指定的泛型一致
        Iterator<String> it = c.iterator();
        while(it.hasNext()){
            String str = it.next();//获取时不需要添加造型语句
            System.out.println(str);
        }
    }
}
